USE [Bases2]
GO
/****** Object:  StoredProcedure [dbo].[CancelarCuenta]    Script Date: 11/28/2011 11:43:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CancelarCuenta]
    @Descripcion varchar(200),    
    @id_cuenta int,
    @id_usuario int
AS 
BEGIN
	SET NOCOUNT ON
	BEGIN TRANSACTION
	DECLARE @Contador int
	SET @Contador=0        
    
    SELECT @Contador=COUNT(1)
    FROM CUENTA
    WHERE CUENTA.id_cuenta=@id_cuenta
    
    IF @Contador=0
    BEGIN
		SELECT 'El numero de cuenta que ingresó no existe'
	END
	ELSE
	BEGIN		       				
		SELECT @Contador=COUNT(1)
		FROM BANCO
		INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_banco 
		INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
		INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
		INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
		INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
		INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
		WHERE ESTADO_CUENTA.id_tipo_estado=1
		AND ESTADO_CUENTA.estado=1
		AND CUENTA.id_cuenta=@id_cuenta
		
		IF @Contador>0
		BEGIN
			SELECT 'La cuenta que ingreso ya se encuentra cancelada'
		END
		ELSE
		BEGIN	
			SELECT @Contador=COUNT(1)
			FROM BANCO
			INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_banco 
			INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
			INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
			INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
			INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
			INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
			WHERE ESTADO_CUENTA.id_tipo_estado=0
			AND ESTADO_CUENTA.estado=1
			AND CUENTA.id_cuenta=@id_cuenta
			
			IF @Contador>0
			BEGIN	
				UPDATE ESTADO_CUENTA 
				SET estado=0
				WHERE ESTADO_CUENTA.id_cuenta=@id_cuenta
			END						
							
			SELECT TOP(1) @Contador=ESTADO_CUENTA.id_estado_cuenta
			FROM ESTADO_CUENTA
			ORDER BY ESTADO_CUENTA.id_estado_cuenta DESC
			
			IF @contador IS NULL
			BEGIN
				SET @contador=-1
			END
			
			SET @Contador=@Contador+1
						
			INSERT INTO ESTADO_CUENTA VALUES(@Contador,@Descripcion,1,GETDATE(),1,@id_cuenta,@id_usuario)
			
			SELECT 'La cuenta se ha cancelado correctamente.'
		END		
	END
			       
	COMMIT
	SET NOCOUNT OFF
END
